server push
サーバのデータ変更をクライアントから察知したい
ファーストチョイスはWebRTC
方法
下に行くほどモダン
polling
更新があろうがなかろうがリクエストをする
ポーリング間隔が長いと時間がかかる
ポーリング間隔が短いとサーバ負荷が高まる
ロングポーリング(Comet)
pros
更新がなければリクエストは飛ばない(pollingの問題を解決)
cons
通信を貼る前にサーバー側で更新されると待ち状態になる
再度通信をはるコスト
Server sent events
pros
Cometのconsを解決
通信を貼り直さずに保持してchunkでレスポンス
cons
クライアント→サーバー方向の通信ができない
HTTP connectionを貼り続けるのでCPU loadが高い
WebSocket
pros
SSEのconsを解決
HTTPではなくTCPベースの新規のプロトコル(WebSocket)を使ってパフォーマンスを出す
クライアント→サーバもできるようになった
cons
UDPが使えない(映像配信・クラウドゲーミングなどのユースケースに不向き)
Head Of Line blocking
WebRTC(クライアント同士の双方向通信向けプロトコル(P2P))
pros
通信を確立できればサーバー経由が不要
ブラウザで実装されている
cons
プロトコルがかなり複雑く、ハイレベルAPIを使うので柔軟性が低い(buffering, decoding, renderingはブラウザがコントロール)
https://www.w3.org/2018/12/games-workshop/slides/21-webtransport-webcodecs.pdf
WebTransport
pros
柔軟性が高く、UDPのようなユースケースにも対応
QUICを使う
cons
参考
https://qiita.com/yuki_uchida/items/d9de148bb2ee418563cf
詳しくは サーバPUSHざっくりまとめ
リアルタイムなwebアプリを実現する方法(ポーリング、Comet、Server Sent Events、WebSocket) - Qiita
HTTP/2における双方向通信とgRPCとこれから - Qiita